// src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import request from '@/utils/request'; // 封装的 axios 实例

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    user: null, // 最开始没拉取到，则为 null；拉取出错（401）后，为 {} 或 'unauthenticated'
    menuItems: []
  },
  mutations: {
    SET_USER(state, userObj) {
      state.user = userObj;
    },
    CLEAR_USER(state) {
      state.user = null;
      state.menuItems = [];
    },
    SET_MENU_ITEMS(state, items) {
      state.menuItems = items;
    }
  },
  actions: {
    // 拉取"当前登录用户信息"
    async fetchCurrentUser({ commit }) {
      try {
        const response = await request.get('/adminAccounts/currentUser');
        commit('SET_USER', response);
        return response;
      } catch (err) {
        commit('CLEAR_USER');
      
        // 静默处理 401 错误（不打印红色错误）
        if (err.response && err.response.status === 401) {
          // console.warn('未登录，已静默处理');
          return null;
        }
      
        // 其他错误抛出（开发阶段建议保留）
        throw err;
      }
    },
    // 根据当前用户的 adminType 拉菜单
    async getItems({ state, commit }) {
      if (!state.user) {
        // 如果没有用户，直接清空或不执行
        commit('SET_MENU_ITEMS', []);
        return null;
      }
      try {
        const res = await request.get('/menuAdminType/getMenuByAdminType', {
          adminType: state.user.isSuperAdmin  // 根据你的后端字段名调整
        });
        const rawData = res.msg;
        const items = rawData.map(item => {
          const menu = item.menuId;
          return {
            icon: menu.icon,
            index: menu.path,
            title: menu.title
          };
        });
        commit('SET_MENU_ITEMS', items);
        
        return items;
      } catch (err) {
        // 获取菜单失败时，可以根据需求清空或保留旧值
        commit('SET_MENU_ITEMS', []);
        // 如果不想抛错可以静默，否则抛给上层
        console.error('拉取菜单出错', err);
        return null;
      }
    },
    // 登出时清理
    logout({ commit }) {
      commit('CLEAR_USER');
      // 也可以调用后端登出接口，例如 request.post('/logout')
    }
  },
  getters: {
    isLoggedIn: function (state) {
      return state.user && state.user.role;
    },
    sidebarItems(state) {
      return state.menuItems;
    },
    userRole: function (state) {
      return state.user ? state.user.role : null;
    },
    isSuperAdmin: function (state) {
      return state.user && state.user.role === 'ROLE_SUPER_ADMIN';
    }
  }
});
